//f[i][j] 只考虑前i个数的情况下总体即恰好为j的选法
//dp[i][j] = dp[i - 1][j] + dp[i - 1][j - v] + ... + dp[i - 1][j - nv]
//dp[i][j -v] =             dp[i - 1][j - v] + ... + dp[i - 1][j - nv]
//dp[i][j] = dp[i - 1][j] + dp[i][j - v]
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010, mod = 1e9 + 7;
int dp[N];
int n;
int main()
{
    cin >> n;
    //刚开始从0个数中取出综合为0的方案数是1
    dp[0] = 1;
    for(int i = 1; i <= n; ++i)
        for(int j = i; j <= n; ++j)
            dp[j] = (dp[j] + dp[j - i])% mod;
    cout << dp[n] << endl;
    return 0;
}